import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;

/**
 * Created with IntelliJ IEDA.
 * Description:
 * User:86186
 * Date:2022-09-06
 * Time:16:35
 */

/**
 * 力扣1441:用栈操作构建数组
 */

public class buildArray {
    public static void main(String[] args) {
        int[] target = {1,3};
        int n = 3;
        List<String> list= new LinkedList<>();
        //list = buildArray(target,n);
        System.out.println(list);
    }
    public List<String> buildArray(int[] target, int n) {
        String PUSH = "Push";
        String POP = "Pop";
        List<String> ans = new ArrayList<>();
        Stack<Integer> stack = new Stack<>();
        // num是产生的数字，index 是 target 数组的下标
        for (int num = 1, index = 0; num <= n && index < target.length; ++num) {
            // 不管是否符合要求，先把数和操作放进来
            stack.add(num);
            ans.add(PUSH);
            // 检查一下是否符合要求，如果不符合，那么就把栈顶元素弹出来，然后再加入Pop操作
            if (target[index] != stack.peek()) {
                stack.pop();
                ans.add(POP);
            } else index++; // 符合要求的话，就把游标往右移动一个
        }
        return ans;
    }
}
